public class demo2 {
    public ListNode reverseKGroup1(ListNode head, int k) {
        ListNode cut=head;
        int n=0;
        while (cut!=null){
            n++;
            cut=cut.next;
        }
        int sum=n/k;
        ListNode cur=head;
        ListNode node=new ListNode();
        ListNode ret=node;
        ListNode pregruop=null;//记录上一组的尾节点
        while (sum>0){
            int temp=k;
            ListNode Hpregruop=cur;//记录当前组的头节点
            ListNode prve=null;
            while (temp>0){//逆转
                ListNode t=cur.next;
                cur.next=prve;
                prve=cur;
                cur=t;
                temp--;
            }
            if(pregruop==null){
                node.next=prve;//第一组反转头节点至虚拟节点
            }else {
                pregruop.next = prve;//连接反转后的头节点
            }
            //更新节点
            pregruop=Hpregruop;
            sum--;
        }
        if (cur!=null)pregruop.next=cur;
        return node.next;
    }
}
